﻿using System.Data;
using System.Data.SqlClient;

namespace ArienToolkits.DBUntilities.SqlServer
{
    /// <summary>
    /// 数据库操作辅助类接口
    /// </summary>
    public interface ISqlHelper
    {
        /// <summary>
        /// 缓存参数
        /// </summary>
        /// <param name="cacheKey">缓存键</param>
        /// <param name="commandParameters">缓存的参数列表</param>
        void CacheParameters(string cacheKey, params SqlParameter[] commandParameters);

        /// <summary>
        /// 执行数据库操作，并返回数据集
        /// </summary>
        /// <param name="cmdType">数据库操作类型</param>
        /// <param name="cmdText">数据库操作语句</param>
        /// <param name="commandParameters">数据库操作参数</param>
        /// <returns></returns>
        DataSet ExecuteFillDataSet(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters);

        /// <summary>
        /// 执行数据库操作，并返回影响行数
        /// </summary>
        /// <param name="cmdType">数据库操作类型</param>
        /// <param name="cmdText">数据库操作语句</param>
        /// <param name="commandParameters">数据库操作参数</param>
        /// <returns></returns>
        int ExecuteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters);

        /// <summary>
        /// 执行数据库操作，并返回数据读取对象
        /// </summary>
        /// <param name="cmdType">数据库操作类型</param>
        /// <param name="cmdText">数据库操作语句</param>
        /// <param name="commandParameters">数据库操作参数</param>
        /// <returns></returns>
        SqlDataReader ExecuteReader(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters);

        /// <summary>
        /// 执行数据库操作，并返回单个对象
        /// </summary>
        /// <param name="cmdType">数据库操作类型</param>
        /// <param name="cmdText">数据库操作语句</param>
        /// <param name="commandParameters">数据库操作参数</param>
        /// <returns></returns>
        object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters);

        /// <summary>
        /// 获取缓存参数
        /// </summary>
        /// <param name="cacheKey">缓存键</param>
        /// <returns></returns>
        SqlParameter[] GetCachedParameters(string cacheKey);
    }
}
